package com.prd.service;

import com.prd.dto.WorkOrderDTO;
import com.prd.model.WorkOrderDO;
import com.baomidou.mybatisplus.extension.service.IService;
import com.prd.util.JsonData;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Map;

/**
 * <p>
 * 工作单数据表 服务类
 * </p>
 *
 * @author lizhaoyi
 * @since 2023-10-30
 */
public interface WorkOrderService extends IService<WorkOrderDO> {

    /**
     * 分页查询工作单
     * @param page
     * @param size
     * @param status
     * @param startTime
     * @param endTime
     * @return
     */
    Map<String, Object> page(int page, int size,Integer status,LocalDate startTime,LocalDate endTime);

    /**
     * 新建工作单
     * @param workOrderDTO
     * @return
     */
    JsonData newWordOrder(WorkOrderDTO workOrderDTO);

    /**
     * 查看工作单详情
     * @param id
     * @return
     */
    JsonData getDetail(Long id);

    /**
     * 获取某天某状态下的工作单记录
     * @param status
     * @param date
     * @return
     */
    JsonData getWorkOrderByDateAndStatus(Integer status, String date);


    /**
     * 修改完成时间
     * @param id
     * @param time
     * @param status
     * @return
     */
    JsonData modifyCompleteTime(Long id, LocalDateTime time, Integer status);

    /**
     * 撤销工作单
     * @param id
     * @return
     */
    JsonData cancel(Long id);

    /**
     * 增加抄送人
     * @param id
     * @param userId
     * @return
     */
    JsonData addCCTo(Long id, Long userId);

    /**
     * 安排执行人/由我执行
     * @param id
     * @param userId
     * @return
     */
    JsonData setExecutor(Long id, Long userId);

    /**
     * 移除执行人
     * @param id
     * @return
     */
    JsonData cancelExecutor(Long id);

    /**
     * 预完成
     * @param id
     * @return
     */
    JsonData preComplete(Long id);

    /**
     * 决算
     * @param workOrderDTO
     * @return
     */
    JsonData finalAccount(WorkOrderDTO workOrderDTO);

    /**
     * 补充执行汇报
     * @param workOrderDTO
     * @return
     */
    JsonData addExecutionReport(WorkOrderDTO workOrderDTO);

    /**
     * 安排督导人员/由我督导
     * @param id
     * @param userId
     * @return
     */
    JsonData setWatcher(Long id, Long userId);

    /**
     * 未达标/不合格
     * @param workOrderDTO
     * @return
     */
    JsonData notStandard(WorkOrderDTO workOrderDTO);

    /**
     * 任务完成
     * @param id
     * @return
     */
    JsonData complete(Long id);

    /**
     * 查询时间节点记录
     * @param id
     * @return
     */
    JsonData selectWorkTimeNodeList(Long id);

    /**
     * 预决算意见
     * @param workOrderDTO
     * @return
     */
    JsonData budgetOpinion(WorkOrderDTO workOrderDTO);
}
